約 5,283,782 件
https://w.atwiki.jp/taichik15/pages/45.html
ConnectionManagerの実装 liftでデータベースを使うには、ConnectionManagerトレイトの継承したクラスを作成する必要がある。 ConnectionManagerのサブクラスで実装するメソッド newConnection( name ConnectionIdentifier ) Box[Connection] システムが新しいコネクションが必要な時に呼ばれる releaseConnection(conn Connection) システムが使わなくなったコネクションをConnectionManagerに戻すときに呼ばれる closeAllConnections_!() 全てのコネクションを閉じる。必ず実装する必要はないが、サーバを落とすときにこのメソッドが呼ばれるようにBoot.scalaで設定する。 実装例 コネクションプール機能を備えたDBVendorを実装する。 サーバ起動時に確保するコネクション数とプールしておく最大コネクション数をコンストラクタで指定するようにする。プールがいっぱいの時にnewConnectionが呼ばれた場合は、一時的に接続を確保し、releaseConnectionが呼ばれたら直ちに接続を閉じる。 import net.liftweb._ import mapper._ import common._ import scala.collection.mutable.Queue import java.io._ import java.net._ import java.sql.{Connection, DriverManager} class MyDBVendor(driver String, url String, user Box[String], pwd Box[String], initConnectionSize Int, maxConnectionSize Int) extends ConnectionManager with Logger { private val pool = new Queue[Connection] private var poolSize = 0 private var connectionSize = 0 private var tmpConnectionSize = 0 initConnectionPool private def initConnectionPool = { debug( "initializing connection pool..." ) for( i - 1 to initConnectionSize ) { getConnection match { case Full( conn ) = { poolSize += 1 connectionSize += 1 pool += conn } case _ = () } } debug( "connection pool is initialized." ) } private def getConnection Box[Connection] = try { debug( "making connection..." ) Class.forName( driver ) val conn = ( user, pwd ) match { case (Full( u ), Full( p )) = DriverManager.getConnection( url, u, p ) case _ = DriverManager.getConnection( url ) } debug( "connection is established poolSize=%d, connectionSize=%d, tmpConnectionSize=%d, maxConnectionSize=%d".format(poolSize, connectionSize, tmpConnectionSize, maxConnectionSize) ) Full( conn ) } catch { case ex = { error( "could not get connection", ex ) Empty } } private def useConnection Box[Connection] = if( pool.isEmpty ) { if( connectionSize maxConnectionSize ) { connectionSize += 1 getConnection } else { tmpConnectionSize += 1 getConnection } } else { debug( "use connection from pool poolSize=%d- %d, connectionSize=%d, tmpConnectionSize=%d, maxConnectionSize=%d".format(poolSize, poolSize-1, connectionSize, tmpConnectionSize, maxConnectionSize) ) poolSize -= 1 Full(pool.dequeue) } private def freeConnection( conn Connection ) = if( tmpConnectionSize != 0 ) { debug( "closing tmporary connection poolSize=%d, connectionSize=%d, tmpConnectionSize=%d- %d, maxConnectionSize=%d".format(poolSize, connectionSize, tmpConnectionSize, tmpConnectionSize-1, maxConnectionSize) ) tmpConnectionSize -= 1 conn.close } else { debug( "putting connection back to pool poolSize=%d- %d, connectionSize=%d, tmpConnectionSize=%d, maxConnectionSize=%d".format(poolSize, poolSize+1, connectionSize, tmpConnectionSize, maxConnectionSize) ) poolSize += 1 pool += conn } def newConnection( name ConnectionIdentifier ) Box[Connection] = synchronized { useConnection } def releaseConnection(conn Connection) = synchronized { freeConnection( conn ) } def closeAllConnections_!() Unit = synchronized { try { debug( "closing all connections" ) debug( "poolSize %d, connectionSize %d".format( poolSize, connectionSize ) ) while( poolSize != connectionSize ) wait( 1000 ) while( !pool.isEmpty ) { debug( "closeing connection poolSize=%d- %d, connectionSize=%d- %d".format(poolSize, poolSize-1, connectionSize, connectionSize-1) ) pool.dequeue.close poolSize -= 1 connectionSize -= 1 } debug( "all connections are closed poolSize=%d, connectionSize %d, tmpConnectionSize %d".format(poolSize, connectionSize, tmpConnectionSize) ) } catch { case ex = error( "failed to close all connections poolSize=%d, connectionSize %d, tmpConnectionSize %d".format(poolSize, connectionSize, tmpConnectionSize) ) } } } 使用例 Boot.scalaで以下のように記述する if (!DB.jndiJdbcConnAvailable_?) { val vendor = new MyDBVendor( Props.get("db.driver").openOr("com.mysql.jdbc.Driver"), Props.get("db.url").openOr("jdbc mysql //localhost/dbname"), Props.get("db.username"), Props.get("db.password"), Props.get("db.init.connection.size").openOr("5").toInt, Props.get("db.max.connection.size").openOr("10").toInt ) LiftRules.unloadHooks.append(vendor.closeAllConnections_! _) DB.defineConnectionManager(DefaultConnectionIdentifier, vendor) }
https://w.atwiki.jp/d10info/pages/16.html
MemoryMap Patch/Timbre Tone Partial 説明 Toneを構成する要素。 音の発生源となるWG 音の形をフィルタで加工するTVF 音の量を調整するTVA がセットになっている。 内部構成としては、 アナログシンセサイザーを模した「シンセサイザーサウンドジェネレーター」と PCM音源である「PCMサウンドジェネレーター」の2つのタイプがあり、 ToneのStructureパラメータでタイプと合成方法が指定される。 最大同時発音数はこのPartial単位で制御される。 D-10では最大32Partialまで同時発音が可能。 構成 パラメータ構造 +x 機能 WG 0 WG Pitch Coarse 1 WG Pitch Fine 2 WG Pitch Key Follow 3 WG Pitch Bender Switch 4 WG Waveform/PCM Wave Bank 5 WG PCM Wave No. 6 WG Pulse Width 7 WG Pulse Width Velocity Sensivity 8 WG P-ENV Depth 9 WG P-ENV Velocity Sensivity 10 WG P-ENV Time Key Follow 11 WG P-ENV Time 1 12 WG P-ENV Time 2 13 WG P-ENV Time 3 14 WG P-ENV Time 4 15 WG P-ENV Level 0 16 WG P-ENV Level 1 17 WG P-ENV Level 2 18 dummy(for MT-32) 19 WG P-ENV End Level 20 WG Pitch LFO Rate 21 WG Pitch LFO Depth 22 WG Modulaton Sensivity TVF 23 TVF Cutoff Frequency 24 TVF Resonance 25 TVF Frequency Key Follow 26 TVF Bias Point/Dir 27 TVF Bias Level 28 TVF ENV Depth 29 TVF ENV Velocity Sensivity 30 TVF ENV Depth Key Follow 31 TVF ENV Time Key Follow 32 TVF ENV Time 1 33 TVF ENV Time 2 34 TVF ENV Time 3 35 dummy (for MT-32) 36 TVF ENV Time 4 37 TVF ENV Level 1 38 TVF ENV Level 2 39 dummy (for MT-32) 40 TVF ENV Sustain Level TVA 41 TVA Level 42 TVA Verocity Sensivity 43 TVA Bias Point 1 44 TVA Bias Level 1 45 TVA Bias Point 2 46 TVA Bias Level 2 47 TVA ENV Time Key Follow 48 TVA ENV Time Velocity Flollow 49 TVA ENV Time 1 50 TVA ENV Time 2 51 TVA ENV Time 3 52 dmmy (for MT-32) 53 TVA ENV Time 4 54 TVA ENV Level 1 55 TVA ENV Level 2 56 dmmy (for MT-32) 57 TVA ENV Sustain Level 58 TVA ENV End Level size 00-00-3A 58
https://w.atwiki.jp/hmiku/pages/29498.html
【登録タグ P あルカP 巡音ルカ 曲】 作詞:あルカP 作曲:あルカP 編曲:あルカP 唄:巡音ルカ 曲紹介 久々にルカ曲です。ちょっと切ない曲です。 いつものようにサビとかでバックコーラスにがくぽ入れようと思ったんですがめんどくて自分の声入れてしまいました。 歌詞 (動画より書き起こし) ちょっとだけ寂しい時もあるけど 泣かないよ 何故なら また次の出会いを求められる Next doorを探して だけど景色が滲んできちゃうよね Close to you Always with you どんなに離れても 繋ぐ心と心のCloud Close to you Always with you Permanent connection with you 同じ時間(とき)の中 懐かしい思い出 額に入れて持って行こう だけど 前を向いて歩きたい 次のトビラ逃さない為に だけど景色が滲んできちゃうよね Close to you Always with you どんなに離れても 繋ぐ心と心のCloud Close to you Always with you Permanent connection with you 同じ雲の中 出会い別れを乗せて回る地球(ほし)に たった一つの大きなCloud 私の想いはPermanent connection with you 光の速さ Close to you Always with you どんなに離れても 繋ぐ心と心のCloud Close to you Always with you Permanent connection with you 同じ時間(とき)の中 コメント 名前 コメント
https://w.atwiki.jp/bemani2sp/pages/448.html
GENRE TITLE ARTIST bpm notes CLEAR RATE TECHNO Scripted Connection⇒ Long Mix DJ MURASAME 151 4459 ? CS版HAPPY SKYの段位認定でのみプレイできる曲。7級に合わせて7級から移動しないようにターンテーブルを回し続けると「コネクション」のSEが聞こえるので、その後に7級を選択すると1曲目で登場。後にCS16 EMPRESSで各音源でほぼそのまま分割した譜面が黒ANOTHERで収録されたので、以下を参照。Scripted Connection⇒ N mix(黒) Scripted Connection⇒ H mix(黒) Scripted Connection⇒ A mix(黒) コメント・攻略 曲が長い分、体力、精神共に辛い譜面。A mixは対称地帯は強化されているが、縦連打地帯は劣化している。N mix、H mix、A mix全てラストが高密度。辛くなり始めるのは恐らくH mixの中盤辺りから。 -- 名無しさん (2010-01-11 01 06 28) 曲時間約6分、どこのTSUNAMIモードだ とにかく体力必須、この後には穴冥が控えてるので体力を残す必要もある -- 名無しさん (2010-08-17 14 46 33) これ単体はCS HAPPY SKYの裏7級のみでしかできないが、各パート別で黒AとしてCS PREMIUM BESTに収録されているので一応練習は可能 -- 名無しさん (2010-11-25 12 14 19) ☆11×2と☆12をノンストップでやらされる。冥挑戦レベルなら体力ゲー -- 名無しさん (2011-08-23 14 35 00) これでHYPER扱いとかやばい -- 名無しさん (2012-03-06 18 46 08) 弐寺初のロング譜面 -- 名無しさん (2016-01-18 14 24 51) かつてジャングリストキングって曲があってだな… -- 名無しさん (2016-01-18 21 40 23) ☆12が程々にできる腕前なら譜面が見切れないということはないだろうが疲れきったところでのラスト手前の対称地帯はなかなかにオオゥとなるw -- 名無しさん (2016-02-12 21 01 15) スクリプH地帯は黒譜面では☆11扱いだけどかなりの詐称なので、N地帯後は4分間☆12をやり続けると思った方がいい -- 名無しさん (2021-10-30 18 04 03) 総合譜面。3曲分繋がっているためとにかく曲が長い。体力勝負だが、譜面の難易度自体は真ボスの冥より遥かに簡単。余裕でクリアできないと冥通過は到底無理。 -- 名無しさん (2022-08-07 06 49 42) 名前 コメント
https://w.atwiki.jp/jennychan/pages/9.html
.NET Framework固有のTipsです。 アプリケーションの設定値 アプリケーション/ユーザごとの設定を簡単に扱える。 マイクロソフト情報(C# で設定を使用する) 要約 ugingに、「System.Configuration」を追加 using System.Configuration; プロジェクトの設定(ソリューションエクスプローラで、プロジェクトを右クリック→プロパティ→設定タブクリック)で、設定値のプロパティを作成する。この時に既定値も指定できる。 データの取得は、Properties.Settings.Default.プロパティ名 string s = Properties.Settings.Default.test1; データの保存は、 Properties.Settings.Default.test1 = "hoge"; Properties.Settings.Default.Save(); ※Saveメソッドを実行しないと保存されない。 設定ファイルの位置は、「Documents and Settings\ ユーザ名 \Local Settings\Application Data\ 会社名 \ アセンブリ名_ハッシュ値 \ アセンブリバージョン \user.config」となるが、会社名を指定しなかった場合は、アセンブリ名が使われる。 DBアクセス(ADO.NET 2.0) 様々なデータベースに対し、統一的に処理を行うために、冗長な手順を踏む必要がある。そのため、どうしても、とっつきにくい構造になってしまっている。 ただし、JDBCも同じような構造のプログラムになっているので、一つ覚えてしまえば、つぶしがが効くとも言える。 接続情報などは、コードに直接記述するのではなく、アプリケーションの設定値を利用するのが望ましい。 小規模なデータで、リレーションを行わないような場合は、DBを使うよりも、XMLを使用して、XPathで検索したほうが手軽な気がする。 使用するクラス DbProviderFactories システムに登録されているDbProviderFactoryインスタンスを管理しているクラス DbProviderFactory プロバイダ情報を格納し、下記クラスのインスタンスを作成するためのクラス JDBCのjava.sql.DriverManagerみないなもの?? DbConnection データベースへの接続状態を表すクラス DbProviderFactoryから取得する JDBCのjava.sql.Connectionに相当する DbCommand DBに対して実行する命令(SQL文など)を表すクラス DbProviderFactoryから取得する JDBCのjava.sql.PreparedStatementに相当する DbDataReader DBに対する問い合わせ結果を表すクラス DbCommand.ExceuteQueryから取得する JDBCのjava.sql.ResultSetに相当する DbDataAdapter DBに対する命令、接続、結果データの格納を表すクラス DbCommandとDataSetの橋渡し役 DataSet メモリ上に展開された、データを階層的に管理するクラス DBの問い合わせ結果などのデータを格納(データはDbDataAdapterから得られる)し、問い合わせ処理に問題が無ければ、1つ以上のDataTableクラスオブジェクトを持つ事になる なお、問い合わせ結果が1万行あれば、1万行分のデータをメモリに展開する DataTable 一つのテーブルに対するデータを格納するクラス DataColumn 列情報を格納するクラス DataColumnCollection テーブル内の全ての列情報を格納するクラス DataColumnのコレクション DataRow 行情報を格納するクラス DataRowCollection テーブル内の全ての行情報を格納するクラス DataRowのコレクション 流れ(問い合わせの場合) // DbProviderFactoryのインスタンスを作成 DbProviderFactory dbProvider = DbProviderFactories.GetFactory("System.Data.OleDb"); // DbProviderFactoryのインスタンスからDbConnectionを取得 DbConnection dbCon = dbProvider.CreateConnection(); // DbConnectionに、ConnectionStringを設定し、Openする // DBファイルはtest.mdb(Microsoft Access MDB) dbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; dbCon.Open(); // この時点で、DBとの接続が完了 // DbProviderFactoryのインスタンスからDbCommandを取得 DbCommand dbCmd = dbProvider.CreateCommand(); // DbCommandに、接続情報(DbConnection)をセット dbCmd.Connection = dbCon; // DbCommandに、問い合わせ文をセット(サンプルなので適当なselect文) dbCmd.CommandText = "select * from foo"; // DbDataAdapterを取得 DbDataAdapter dbAdap = dbProvider.CreateDataAdapter(); // DbDataAdapterに、DbCommandを結びつける dbAdap.SelectCommand = dbCmd; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds); // DataSetは複数のテーブルに対するデータが保存できるので、 // 1つ以上のテーブルデータが保存されているか確認する if (ds.Tables.Count 0) { // 最初のテーブル情報を利用する DataTable dt = ds.Tables[0]; // 問い合わせ結果が1行以上存在するか確認する DataRowCollection rows = dt.Rows; if (rows.Count 0) { // 問い合わせ結果の最初の行の、最初の列の値を出力する System.Console.WriteLine(rows[0][0]); // 問い合わせ結果の最初の行の、列名が「FIELD1」の列の値を出力する System.Console.WriteLine(rows[0]["FIELD1"]); } } // 接続を切断する dbCon.Close(); ということらしい… DataSetとDbDataReader DataSetは、全ての問い合わせ結果をメモリ上にコレクション的に格納する DbDataReaderは、データベースのカーソル的な動作を行う 上記のDataSetを使用した問い合わせ処理 // DbCommandに、問い合わせ文をセット(サンプルなので適当なselect文) dbCmd.CommandText = "select * from foo"; // DbDataAdapterを取得 DbDataAdapter dbAdap = dbProvider.CreateDataAdapter(); // DbDataAdapterに、DbCommandを結びつける dbAdap.SelectCommand = dbCmd; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds); をDbDataReaderを使用すると // DbCommandに、問い合わせ文をセット(サンプルなので適当なselect文) dbCmd.CommandText = "select * from foo"; // 問い合わせ結果を取得する DbDataReader dbReader = cmd.ExecuteReader(); // 一行ずつ処理を行う do { while (dbReader.Read()) { // 列情報を取得する // 列名では取得できない? // 実際の型と異なる形式で取得できない? int f1 = dbReader.GetInt32(0); string f2 = dbReader.GetString(1); string f3 = dbReader.GetString(2); ・・・ } } while (dbReader.NextResult()); // DbDataReaderを使い終わったらCloseする dbReader.Close(); となる。 挿入、更新、削除などのNonQuery処理 DbCommand.ExceuteNonQueryでSQL文の実行が行える。 // DbCommandに、実行したいSQL文をセット(サンプルなので適当なupdate文) dbCmd.CommandText = "update foo set update= 2007-01-02 where id=1"; // SQL文の実行 cmd.ExecuteNonQuery(); パラメータ化されたSQL文 java.sql.PreparedStatementの様に、SQL文中でパラメータを使用する事が可能となる。 // DbCommandに、実行したいSQL文をセット(サンプルなので適当なupdate文) // パラメータマーカーは、DBに依存するそうだが、OLE DBでも、@idの様な記述で問題なく動く dbCmd.CommandText = "update foo set update=@update where id=@id"; // パラメータの情報を設定 // DBに依存しないコードは記述できない??? // OLD DBの場合、パラメータを名前で判断していないので、 // パラメータの出現順とAddメソッドが同期していなければいけない // また、実際のパラメータ名と異なる名前を使用してもエラーにならず、正しく処理される dbCmd.Parameters.Add(new OleDbParameter("@update", OleDbType.Date)); dbCmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Numeric)); // パラメータに値を設定 // dbCmd.Parameters[0].Value = 2007-01-02 としてもよいが、パラメータ名を使用して値を設定できる dbCmd.Parameters["@update"].Value = 2007-01-02 ; dbCmd.Parameters["@id"].Value = 1; // SQL文の実行 cmd.ExecuteNonQuery(); ADO.NET 2.0でOLE DB、Oracle、SqlServerなど、個々のDBに依存したクラスを使用せずに、DbXxxxクラスでコードが記述できると言っているが、パラメータの型指定などでは、使用するDBに依存するコードとなってしまうらしい。 また、複数の行に対する処理の場合、 // DbCommandに、実行したいSQL文をセット(サンプルなので適当なupdate文) dbCmd.CommandText = "update foo set update=@update where id=@id"; // パラメータの情報を設定 dbCmd.Parameters.Add(new OleDbParameter("@update", OleDbType.Date)); dbCmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Numeric)); // パラメータに値を設定 dbCmd.Parameters["@update"].Value = 2007-01-02 ; dbCmd.Parameters["@id"].Value = 1; // SQL文の実行 cmd.ExecuteNonQuery(); // 次の処理のためのパラメータに値を設定 // 直前の処理と同じSQL文であれば、パラメータ情報を設定しなおす必要は無い dbCmd.Parameters["@update"].Value = DateTime.Now; dbCmd.Parameters["@id"].Value = 2; // SQL文の実行 cmd.ExecuteNonQuery(); とすることも出来る 日付型のパラメータと定義してあれば、DataTime型のデータを設定しても大丈夫らしい。 DataGridView .NET Framework version 2.0から、DataGridコントロールに代わるコントロールとして追加されたもので、DataSourceにデータオブジェクトを指定し、データの表示、編集作業を行う。 DataSourceには、 Visual StudioのGUI操作で作成したデータソースオブジェクト DataSetオブジェクト DataTableオブジェクト が使われる。 データの参照であれば、Visual StudioのGUI操作(データソース構成ウィザード)だけで大抵の処理が実現できてしまう。 Microsoftとしては、データの編集作業も含めて、Visual StudioのGUI操作だけで出来ると主張しているが、一般的なアプリケーションであれば、データの追加、修正作業を行う際には、データの内容、更新確認などの確認処理を経てから実際に更新処理を行うはずなのだが、これらのUI処理まで面倒見てはくれていない。 DataGridViewのDataSourceにDataSetを指定する際には、DataSet内に一つしかテーブルが存在しない状態であっても、「どのテーブルを表示させるのか」という指定が必要になる。 // DataGridViewに表示したいテーブル名 string sMemberName = "foo"; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds, sMemberName); // 対象となるテーブルオブジェクトの存在確認 if (ds.Tables.IndexOf(sMemberName) = 0) { // DataGridViewのDataSourceとDataSetを結びつける dataGridView1.DataSource = ds; // DataMemberプロパティが設定されていないと表示されない dataGridView1.DataMember = sMemberName; } DataGridViewのDataSourceにDataTableを指定する場合は、 // DataGridViewに表示したいテーブル名 string sMemberName = "foo"; // 問い合わせ結果を受け取るための、DataSetクラスのインスタンスを作成する DataSet ds = new DataSet(); // 問い合わせ結果を取得する dbAdap.Fill(ds, sMemberName); // 対象となるテーブルオブジェクトの存在確認 if (ds.Tables.IndexOf(sMemberName) = 0) { // DataGridViewのDataSourceとDataTableを結びつける dataGridView1.DataSource = ds.Tables[sMemberName]; } となる。 さらに、DataAdapterのFillメソッドには、DataTableを指定できるので // 問い合わせ結果を受け取るための、DataTableクラスのインスタンスを作成する DataTable dt = new DataTable(); // 問い合わせ結果を取得する dbAdap.Fill(dt); // DataGridViewのDataSourceとDataTableを結びつける dataGridView1.DataSource = dt; と出来る。 データソース Visual Studio プロジェクトのデータソースとは、アプリケーションから利用可能な データベース オブジェクト Webサービス などのデータを指し、型指定されたDataSetとTableAdapterが用意される。 型指定されたDataSetを使用すると、 ds.Tables["foo"].rows[0]["FIELD1"]; と記述していたコードが ds.foo[0].FIELD1; となる。 フィールド値のNULLチェック(DBNull判定)は、「Is + 列名 + Null」形式のメソッドで判定する。 if ( !ds.foo[0].IsFIELD1Null() ) f1 = ds.foo[0].FIELD1; コレクションのキー部分がプロパティ化されるわけだが、プロパティ化されたということは、単なるObject型データの連想配列として管理していた従来のDataSetと異なり、型が定義されているので、数値列に対して文字列を指定した様な場合、コンパイル時にエラーが出るのでコードの信頼性が高まる。 TableAdapterは、DataAdapterに型指定を追加したバージョン。 このTableAdapterオブジェクトには、挿入、削除、更新、問い合わせなどの機能をGUI操作により作成できる。 パラメータ付クエリは、「TableAdapter クエリの構成ウィザード」を使用して対話的に作成する事が出来、「クエリ ビルダ」ダイアログの「フィルタ」セルにパラメータを指定することで、=条件だけでなく、like条件なども定義できるが、パラメータ名については、使用するDBに依存したものになる。 MSDNのドキュメントを始め、大抵のサンプルでは、フィルタ名として「@param」などの、「@」を冠した名前が使われているが、これは、SQL Serverのパラメータマーカーで、OLE DBの場合は、「?」以外はパラメータとして認識されない。 DbCommandクラスでも、パラメータマーカーはDB依存度が低くなっているのに、TableAdapterでは、DB依存度が高い。 また、DataGridViewとデータソースを結び付けている場合、既定の処理では、FormLoadのイベント処理にデータソースからデータを取得するコードが自動的に追加されるのだが、データソースが存在していない場合、当然、例外が発生する。 自動的に追加されるコードは、try~catchで囲まれた形で追加されるわけでもなく、また、接続文字列変更や、再接続のためのサポートメソッドも見当たらない。 接続文字列プロパティは、読み取り専用なので直接XMLファイルを書き換えないと変更できないらしい。開発環境と、実稼働環境の接続設定が異なる場合に面倒な事になる。 まともなプロジェクトでは、開発時には実稼働環境を使うことはしないと思うので、この点の使い勝手は悪いとしか言いようが無いが、TableAdapterインスタンスのConnectionプロパティのConnectionStringを再設定するとうまく動いてくれるので、アプリケーションの最初で、接続文字列を設定するコードを記述しろという事か? データベース作成 ADOX.CatalogClassを使用する事でデータベースを作成できるらしい。 ただし、データベースによっては作成できないものもあると思われる。 ADOX namespaceは、「Microsoft ADO Ext. 2.x for DDL and Security」に含まれているらしい。 ADOX.CatalogClassクラスのCreateメソッドの引数に、データベースへの接続文字列を指定することで作成する。 string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; ADOX.CatalogClass cat = new ADOX.CatalogClass(); cat.Create(sConnectionString ); XML 従来からInternet Explorerの一部として配布されていたMSXMLがあったが、.NET FrameworkのXMLクラスは、様々な点で使い勝手が良くなっている。 C言語から使用する場合、文字列をBSTRなどの形にしないといけなかったが、C#言語の場合は、メモリ管理は自動だし、始めからUnicode対応なので、そのまま扱える 何も指定しなくても、改行やインデントされた状態でファイルへ出力できる ほぼCOMインターフェース直接アクセスに近いMSXMLと違い、自動でメモリ管理をしてくれるので、Nodeの参照カウンタ管理などを気にせずに使える など ところで、.NET FrameworkのXMLクラスは、ファイルの先頭がXML宣言( ?xml…)でないとエラーになるらしい。コメントであっても。 MS-XMLでは問題なかったのだが…。 また、二つのXMLオブジェクトの結合を行う場合、自身の子ノードでないノードをAppendChildなどで追加させる事になるのだが、自分がCreateしたノード以外のノードを追加する事が出来ないので、ImportNodeメソッドでコピーを作成した後にノードを追加する。 XmlDocument doc1 = new XmlDocument(); XmlDocument doc2 = new XmlDocument(); doc1.Load("test1.xml"); doc2.Load("test2.xml"); XmlNodeList lst = doc1.SelectNodes("/foo/*"); XmlNode parent = doc2.SelectSingleNode("/foo"); foreach (XmlNode node in lst) { parent.AppendChild(doc2.ImportNode(node, true)); } LINQ LINQ(Language Integrated Query 統合言語クエリ)とは、.Net Framework 3.5から導入された、プログラム言語に統合されたクエリ機能。 一般的な問い合わせであれば、LINQだけで記述できるらしいので、複数のデータベースシステムへの対応が容易になる(可能性がある)。 また、プログラム言語の構文の一つと言う事から、表の列と、変数の比較処理も記述できる。 今までは、存在しない表、列を使用したSQL文を記述しても、実行時エラーが発生することはあっても、コンパイルエラーが発生することは無かった。 しかし、プログラム言語に統合される事により、存在しない表、列を指定した問い合わせ処理に対して、コンパイル時にエラーを検出する事が可能となる。 また、型指定されたDataSetと同様、列の型も管理しているので、数値列に対して文字列との比較、代入を行うような処理に対してもコンパイルエラーが発生する。 マイクロソフトのサイトでは、DataContextの作成は // DataContext で接続文字列を取得します。 DataContext db = new DataContext("c \\northwind\\northwnd.mdf"); と記述されているが、これは、SQL Serverでしか有効ではない。 つまり、AccessのMDBファイルを使用したいときなどは、この様な記述では例外が発生し正しく動作しない。 SQL Server以外のDBに対してDataContextを作成する場合は、IDbConnectionを引数にしたコンストラクタを使用することで可能となる。 // DbProviderFactoryのインスタンスを作成 DbProviderFactory dbProvider = DbProviderFactories.GetFactory ("System.Data.OleDb"); // DbProviderFactoryのインスタンスからDbConnectionを取得 DbConnection dbCon = dbProvider.CreateConnection(); // DbConnectionに、ConnectionStringを設定し、Openする // DBファイルはtest.mdb(Microsoft Access MDB) dbCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; // DbConnectionのオブジェクトから、DataContextを作成する DataContext db = new DataContext(dbCon); ※こんな面倒な事をしなくても、 // 接続文字列 string sCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=test.mdb"; // System.Data.OleDb.OleDbConnectionのインスタンスを作成 DbConnection dbCon = new System.Data.OleDb.OleDbConnection(sCon); // DbConnectionのオブジェクトから、DataContextを作成する DataContext db = new DataContext(dbCon); で出来る。 LINQは、.Net Frameworkで扱えるオブジェクトに対する「汎用クエリ機能」なので、データベースやXML以外にも適用できる。 たとえば、以下の様なちょっと複雑なソート処理は private static int Compare(int x, int y) { int result = (x % 3) - (y % 3); if (result == 0) { result = y - x; } return result; } private void Test() { int[] numbers = { 1, 3, 5, 7, 9, 2, 4, 6, 8 }; Array.Sort(numbers, Compare); foreach (var i in numbers) { Console.Write("{0} ", i); } Console.WriteLine(); } LINQを使うと private void Test() { int[] numbers = { 1, 3, 5, 7, 9, 2, 4, 6, 8 }; foreach (var i in numbers.OrderBy(i = i % 3).ThenByDescending(i = i)) { Console.Write("{0} ", i); } Console.WriteLine(); } と記述できる。 ただし、LINQはあくまでも「クエリ」処理を行うものなので、Array.Sortメソッドの様に、データソース自体を変更する事は無い。 上記の処理で、データソースを変更したい場合は、 numbers = numbers.OrderBy(i = i % 3).ThenByDescending(i = i).ToArray(); と並べ替えメソッドの最後に、ToArray()をつけ、その時点での問い合わせ結果を配列オブジェクトとして生成する。 また、 private void Test() { int[] numbers = { 1, 3, 5, 7, 9, 2, 4, 6, 8 }; // 配列全体の平均値 Console.WriteLine(numbers.Average()); // 配列の要素数 (numbers.Lengthと同じ) Console.WriteLine(numbers.Count()); // 配列内の5以下の数値の平均値 Console.WriteLine(numbers.Where(i= (i =5)).Average()); // 配列内の偶数値の要素数 Console.WriteLine(numbers.Where(i = (i =5)).Count()); } の様な事も出来る。 ファイル名検索 System.IO.DirectoryクラスのGetFilesメソッドを使うとファイル名を手軽に指定したディレクトリ下のファイルをフルパスで文字列配列として取得できる。 string[] sFiles = Directory.GetFiles(@"c \temp"); とすると、c \tempディレクトリ下のファイル名を取得できる。 string[] sFiles = Directory.GetFiles(@"c \temp", "*.txt"); とすると、c \tempディレクトリ下の、拡張子がtxtのファイル名を取得できる。 ただし、上記の方法では、サブディレクトリ下を検索していない。 そこで、サブディレクトリも検索対象とする場合は、SearchOptionを指定し、 string[] sFiles = Directory.GetFiles(@"c \temp", "*.txt", SearchOption.AllDirectories); とする事で、c \temp以下の全てのディレクトリ下にある、拡張子がtxtのファイルを取得できる。 なお、無効なディレクトリを指定した場合は、例外が発生する。 ファイルやディレクトリの存在確認 System.IO.FileクラスのExistsメソッドを使うとファイルの存在確認が手軽に実現できる。 if (File.Exists(@"c \temp\foo.txt")) { // ファイルが存在する } また、System.IO.DirectoryクラスのExistsメソッドを使えば、ディレクトリの存在確認を行える。 Drag Drop Drag Dropを実現するためには フォームのAllowDropプロパティをtrueにする Drag Dropの準備を行うDragEnterイベントを作成する Drag Dropされたファイル名などを受け取るDragDropイベントを作成する を行う必要がある。 Drag Dropで複数のファイルを受け取る処理の場合、 private void Form1_DragEnter(object sender, DragEventArgs e) { // ファイルをDrag Dropの処理対象にする場合 if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; } private void Form1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] sFiles = (string[])e.Data.GetData(DataFormats.FileDrop); Array.Sort(sFiles); // ファイル名を並べ替えたいときには必要 foreach (string sFileName in sFiles) Console.WriteLine(sFileName); } } の様になる。 コレクション コレクションの中身を順次処理する場合、 Dictionary string, string dic = new Dictionary string, string (); dic.Add("Jan", "睦月"); dic.Add("Feb", "如月"); … foreach (string sKey in dic.Keys) { Console.WriteLine(dic[sKey]); } の様に、foreachを使用する事が多いと思うが、foreach中でコレクションを処理しながら、削除処理を行う foreach (string sKey in dic.Keys) { Console.WriteLine(dic[sKey]); dic.Remove(sKey); } の様な処理を実行すると、コレクションが変更されたと言う事で、InvalidOperationExceptionの例外が発生する。 この様なときには、 string[] sKeys = new string[dic.Count]; dic.Keys.CopyTo(sKeys, 0); foreach (string sKey in sKeys) { Console.WriteLine(dic[sKey]); dic.Remove(sKey); } と、キー(dic.Keys)の値をCopyToメソッドを使用して一旦取り出して処理をすると良い?
https://w.atwiki.jp/bemani2sp/pages/207.html
GENRE TITLE ARTIST bpm notes CLEAR RATE TECHNO Scripted Connection⇒ H mix DJ MURASAME 151 875 ? 名前 コメント
https://w.atwiki.jp/bemanidbr/pages/223.html
VERSION GENRE TITLE ARTIST bpm notes 属性 12 HAPPYSKY TECHNO Scripted Connection⇒ N mix DJ MURASAME 151 1980 - 攻略・コメント 名前 コメント
https://w.atwiki.jp/bemanidbr/pages/222.html
VERSION GENRE TITLE ARTIST bpm notes 属性 12 HAPPYSKY TECHNO Scripted Connection⇒ H mix DJ MURASAME 151 2012 - 攻略・コメント 名前 コメント
https://w.atwiki.jp/vocaloidchly/pages/3080.html
作詞:オレジナルP 作曲:オレジナルP 編曲:オレジナルP 歌:巡音ルカ 翻譯:yanao 請取用翻譯者不要冒著被我發現然後詛咒一輩子的危險改動我的翻譯謝謝合作 Rainbow Connection 在夏天的某個日子,我在那遇見了你 我確定我你的心跳都開始加快 無論晝夜我都在想著你,你的笑容進入我的心裡 但隨著時間經過,我得承認我的記憶愈來愈淡薄了 如果我能夠收集起你我的眼淚, 是否能造出一道美麗的橋樑? 我有些害怕你是否和我有一樣的想法,但我是如此相信的 希望能在某天變得自由 讓我們沿著這條路前往我們相遇的重要場所 架起彩虹的橋樑吧! 我們將會在雨後就我們兩人在這裡跳舞 Rainbow Connection! 當下雨時,我總是眺望著窗外 而每次我都會發覺我正在獨自嘆氣 我問我自己「這陣雨到底何時會停?」 但在心裡的某個角落, 我知道「那」並不是會一直出現的 我應該要用話語去敘述我的感覺嗎? (在那時我們說了些什麼呢?) 就在不久前我就希望能見到你 (我迷失於不知該如何傳達我的心意) 天氣的多變就宛如一面鏡子 (情緒的混亂令我的心情一片迷濛) 反映出我們的心情 希望你能夠理解我的想法 我們將不會再產生誤解,我們的關係也會變得更好 架起心靈的橋樑吧! 我似乎能坦率對你說出我的心意了 我希望能在某天變得自由 讓我們沿著這條路前往我們相遇的重要場所 架起彩虹的橋樑吧! 我們將會在雨後就我們兩人在這裡跳舞 Rainbow Connection!
https://w.atwiki.jp/bemanidbr/pages/1386.html
VERSION GENRE TITLE ARTIST bpm notes 属性 12 HAPPYSKY TECHNO Scripted Connection⇒ A mix DJ MURASAME 151 3062 - 攻略・コメント 名前 コメント